package com.cawis.util;

import cn.hutool.core.convert.Convert;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.lang.tree.Tree;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils;

import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

@Slf4j
public class Tools {

    //需要处理的文件夹/文件
    public static String PATH = "C:\\Users\\Administrator\\Desktop\\";

    public static void main(String[] args) {
        List list = list();
        System.out.println(list);
//        listAll();
    }

    /**
     * 不遍历子目录
     */
    public static List list() {
        List<String> names = FileUtil.listFileNames(PATH);
        return names;
    }

    /**
     * 包括子目录
     */
    public static void listAll() {
        List<File> files = FileUtil.loopFiles(PATH);
        for (File file : files) {
            System.out.println(file.getName());
        }
    }
    
    /**
     * 递归方法
     * @param anyLevelCategoryList 任意层级的目录集合
     * @param keyword 关键字
     */
    public static List<Tree<String>> treeMatch(List<Tree<String>> anyLevelCategoryList, String keyword){
        Iterator<Tree<String>> iter = anyLevelCategoryList.iterator();
        List list=new ArrayList();
        while (iter.hasNext()){
            // 获取当前遍历到的目录
            Tree<String> category = iter.next();
            // 如果当前目录名称包含关键字，则什么也不做（不移除），否则就看下一级
            if(!Convert.toStr(category.get("name")).contains(keyword)){
                // 取出下一级目录集合
                List<Tree<String>> childrenCategoryList = category.getChildren();
                // 递归
                if(!CollectionUtils.isEmpty(childrenCategoryList)){
                    treeMatch(childrenCategoryList,keyword);
                }
                // 下一级目录看完了，如果下一级目录全部被移除，则移除当前目录
                if(CollectionUtils.isEmpty(category.getChildren())){
                    iter.remove();
                }
            }
            list.add(category);
        }
        return list;
    }
    
}
